package org.com.lvtpo.servlets;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import beans.BeanCliente;
import beans.BeanCotizacionRodamiento;
import beans.BeanItemSolicitudCotizacion;
import beans.BeanSolicitudCotizacion;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

import controlador.AccesoRemoto;

public class IngresarSolicitud extends HttpServlet{

	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		BeanSolicitudCotizacion beanSolicitud = new BeanSolicitudCotizacion();
		BeanCliente beanCliente = (BeanCliente) req.getSession().getAttribute("beanCliente");
		
		if(req.getAttribute("ERROR") != null)
			req.removeAttribute("ERROR");
		if(req.getAttribute("LISTAITEMS") != null)
			req.removeAttribute("LISTAITEMS");

		String opcion = "";
		if(req.getParameter("opcion") != null)
			opcion = req.getParameter("opcion");

		if(ServletFileUpload.isMultipartContent(req) && "".equalsIgnoreCase(opcion)){
			try {
				ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
				List<FileItem> fileItemsList = servletFileUpload.parseRequest(req);
				if(!fileItemsList.isEmpty()){
					for(FileItem fileItem: fileItemsList){
						if(fileItem.getFieldName().equalsIgnoreCase("fileArchivo")){
							FileItem archivo = fileItem;
							XStream xstream = new XStream(new DomDriver());
							xstream.alias("SolicitudCotizacion", BeanSolicitudCotizacion.class);
							xstream.alias("ItemSolicitudCotizacion", BeanItemSolicitudCotizacion.class);
							beanSolicitud = null;
							beanSolicitud = (BeanSolicitudCotizacion) xstream.fromXML(archivo.getInputStream());

							req.setAttribute("LISTAITEMS", beanSolicitud);
							req.getSession().setAttribute("LISTAITEMS", beanSolicitud);
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			beanSolicitud.setBeanCliente(beanCliente);
			RequestDispatcher rd = getServletContext().getRequestDispatcher("/jsp/ingresarSolicitud.jsp");
			rd.forward(req, resp);
		}
		else if (opcion.equalsIgnoreCase("siguiente")){
			beanSolicitud = (BeanSolicitudCotizacion) req.getSession().getAttribute("LISTAITEMS");
			beanSolicitud.setBeanCliente(beanCliente);
			BeanCotizacionRodamiento beanCotizacionRodamiento = AccesoRemoto.getInstancia().mostrarComparativaPrecios(beanSolicitud);
			req.getSession().removeAttribute("LISTAITEMS");
			req.setAttribute("COTIZACION", beanCotizacionRodamiento);
			req.getSession().setAttribute("COTIZACION", beanCotizacionRodamiento);
			RequestDispatcher rd = getServletContext().getRequestDispatcher("/jsp/mostrarCotizacion.jsp");
			rd.forward(req, resp);

		} else{
			RequestDispatcher rd = getServletContext().getRequestDispatcher("/jsp/ingresarSolicitud.jsp");
			rd.forward(req, resp);
		}
	}

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		BeanSolicitudCotizacion beanSolicitud = new BeanSolicitudCotizacion();

		if(req.getAttribute("LISTAITEMS") != null)
			req.removeAttribute("LISTAITEMS");
		if(req.getAttribute("ERROR") != null)
			req.removeAttribute("ERROR");

		
		BeanCliente beanCliente = (BeanCliente) req.getSession().getAttribute("beanCliente");
		
		
		
		String opcion = "";
		if(req.getParameter("opcion") != null)
			opcion = req.getParameter("opcion");

		if(ServletFileUpload.isMultipartContent(req) && "".equalsIgnoreCase(opcion)){
			try {
				ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
				List<FileItem> fileItemsList = servletFileUpload.parseRequest(req);
				if(!fileItemsList.isEmpty()){
					for(FileItem fileItem: fileItemsList){
						if(fileItem.getFieldName().equalsIgnoreCase("fileArchivo")){
							FileItem archivo = fileItem;
							String nombreArchivo = archivo.getName();
							XStream xstream = new XStream(new DomDriver());
							xstream.alias("SolicitudCotizacion", BeanSolicitudCotizacion.class);
							xstream.alias("ItemSolicitudCotizacion", BeanItemSolicitudCotizacion.class);
							beanSolicitud = null;
							if(nombreArchivo!= null && !"".equalsIgnoreCase(nombreArchivo)){
								if(nombreArchivo.contains("C:"))
									beanSolicitud = (BeanSolicitudCotizacion) xstream.fromXML(new FileInputStream(nombreArchivo));
								else
									beanSolicitud = (BeanSolicitudCotizacion) xstream.fromXML(new FileInputStream("C://xml//"+nombreArchivo));

								req.setAttribute("LISTAITEMS", beanSolicitud);
							}
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			beanSolicitud.setBeanCliente(beanCliente);
			RequestDispatcher rd = getServletContext().getRequestDispatcher("/jsp/ingresarSolicitud.jsp");
			rd.forward(req, resp);
		}
		else if (opcion.equalsIgnoreCase("siguiente")){

		} else{
			RequestDispatcher rd = getServletContext().getRequestDispatcher("/jsp/ingresarSolicitud.jsp");
			rd.forward(req, resp);
		}
	}


}
